# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/10 13:58 
@Author  : ZhangShenao 
@File    : perf_log_decorator.py 
@Desc    : 性能统计日志装饰器

通过装饰器,统计函数的执行耗时,并打印日志
"""
import functools
import time


def perf_log(f):
    """
    性能统计日志装饰器
    用于统计函数的执行耗时,并打印日志
    :param f: 被装饰函数
    :return:
    """

    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        res = f(*args, **kwargs)
        end = time.perf_counter()
        costs = round((end - start) * 1000, 2)
        print(f'[{f.__name__}] costs {costs} ms')
        return res

    return wrapper


@perf_log  # 使用perf_log装饰器
def accumulate(n: int) -> int:
    """
    累加函数
    累加从0到n的所有整数
    :param n: 累加上限
    :return: 累加结果
    """

    result = 0
    for i in range(n + 1):
        result += i
    return result


if __name__ == '__main__':
    accumulated = accumulate(10000000)
    print(accumulated)
